package com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.settlement;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

import static com.xiaoshuidi.cloud.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;

/**
* 结算单明细 Base VO，提供给添加、修改、详细的子 VO 使用
* 如果子 VO 存在差异的字段，请不要添加到这里，影响 Swagger 文档生成
*/
@Data
public class SettlementDetailBaseVO {

    /**
    * 结算单id
    * */
    private Long settlementId;
    /**
     * 费项编号(关联Fee表)
     */
    @NotNull(message = "费项编号不能为空")
    private Long feeId;

    /**
     * 费项名称
     */
    @NotBlank(message = "费项名称不能为空")
    private String feeName;

    /**
    * 账单金额
    * */
    @NotNull(message = "费项金额不能为空")
    private BigDecimal amount;

    /**
    * 收退款 金额
    * */
    @NotNull(message = "收退款不能为空")
    private BigDecimal refundableAmount;

    /**
    * 账单开始时间
    * */
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime orderStartDate;

    /**
    * 账单结束时间
    * */
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime orderEndDate;

    /**
     * 退款周期开始日期
     */
    private LocalDate refundableStartDate;
    /**
     * 退款周期结束日期
     */
    private LocalDate refundableEndDate;

    /**
     * 收款开始时间
     * */
    @Schema(description = "收款开始时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime startReceivables;

    /**
     * 收款结束时间
     * */
    @Schema(description = "收款结束时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDateTime endReceivables;

    /**
    * 扩展字段
    * */
    private String extension;

    /**
     * 资金流向 out 流出| in 流入
     * */
    @NotNull(message = "费项资金流向不能为空")
    private String flowType;

    /**
    * 备注
    * */
    private String remark;

    /**
     * 费项类型 0预付费 1智能水电表 2资产 3合同账单
     * */
    private String detailType="3";

    /**
     * 合同id
     */
    private Long contractId;

}
